﻿using System;
using System.Data;
using System.Collections.Generic;
using Yorkg.CMS.Common;
using Yorkg.CMS.Plugin;
using Yorkg.CMS.Template.GenerateCS;
using System.Collections;

/*
    本页面代码由YorkCMS模板引擎生成于 2/23/2012 2:19:47 PM
    模板文件物理路径：  E:\Projects\Wwwroot\TSAA\shengchanjishu.ts.heagri.gov.cn\templates\NMY\head.html
    说明： 
        1 【代码的注释部分】关于行信息的提示，可能与实际的模板文件的行信息不符，是因为读取模板文件后，对空行做了去除处理，对include的文件做了二次加载处理，所以，这里的行信息提示进攻参考，不做标准验证
*/

namespace Yorkg.CMS.TemplateDlls
{      
    public class TpDlls6ce649a10b914062955ee787f1b51c0d : ItemplateControl
    {      

		#region 全局变量
		
		IDAL m_IDAL = ITemplateAccess.GetIDalInstance();//全局数据操作接口
		IFunc m_IFunc = ITemplateAccess.GetIFuncInstance();//全局函数操作接口
		
		Dictionary<string, DataTable> oDictionaryTable = new Dictionary<string, DataTable>();//全局公共Table池
		Dictionary<string, DataRow> oDictionaryRow = new Dictionary<string, DataRow>();//全局公共Row池
		Dictionary<string, object> oDictionaryObj = new Dictionary<string, object>();//全局公共object池
		
		const string strCurrenContent = "CurrenContent";//当前信息的内容所对应的oDictionaryRow的标识key
		const string strNodeInfo = "NodeInfo";//当前信息的结点info所对应的oDictionaryRow的标识key
		const string strIndexID = "IndexID";//当前内容所对应的oDictionaryObj的标识key
		const string strNodeID = "NodeID";//当前结点所对应的oDictionaryObj的标识key
		
		TemplateDllPageInfo oTemplatePageInfo = new TemplateDllPageInfo();//全局的模板实体
		
		#endregion

		#region 公共方法
		
		/// <summary>
		/// 获取变量值的方法
		/// </summary>
		public string GetTagValue(string strDataSet, string strIndex, string strVar)
		{
		    return CommonMethord.GetTagValue(strDataSet, strIndex, strVar, oDictionaryTable, oDictionaryRow, oDictionaryObj, oTemplatePageInfo, strCurrenContent, m_IDAL);
		}
		
		/// <summary>
		/// 设定某一变量
		/// </summary>
		public void SaveVar(string strName, object objValue)
		{
		    CommonMethord.SaveVar(strName, objValue, oTemplatePageInfo, oDictionaryObj);
		}
		
		/// <summary>
		///  保存一行数据到 DataRow 库中
		/// </summary>
		public void SaveRow(string strName, DataRow oDataRow)
		{
		    CommonMethord.SaveRow(strName, oDataRow, oDictionaryRow);
		}
		
		/// <summary>
		/// 保存table到 DataTable 库中 
		/// </summary>
		public void SaveTable(string strName, DataTable oTable)
		{
		    CommonMethord.SaveTable(strName, oTable, oDictionaryTable);
		}
		
		/// <summary>
		/// 根据CMS标签的Attributes将数据保存至公共变量库中
		/// </summary>
		public void SaveCMSTagData(Dictionary<string, string> oAttributes)
		{
		    CommonMethord.SaveCMSTagData(oAttributes, oDictionaryTable, oDictionaryRow, oDictionaryObj, oTemplatePageInfo);
		}
		
		/// <summary>
		/// 执行函数，返回string
		/// </summary>
		public string ExeCuteFunc(string strFuncName, ArrayList olistParams)
		{
		    bool isSuccess = false;
		    object obj = IFuncControl.ExecuteFunctionForDll(strFuncName, olistParams, ref isSuccess, m_IFunc);
		    return obj.ToString();
		}
		
		/// <summary>
		/// 替换字符串里特殊的字符串
		/// </summary>
		public string ConvertSpecialChar(string strSource)
		{
		    return strSource;// CommonMethord.ConvertSpecialChar(strSource);
		}
		
		/// <summary>
		/// 根据key获取datatable
		/// </summary>
		public DataTable getDT(string strKey)
		{
		    DateTime _start = DateTime.Now;
		    DataTable oReturn =  CommonMethord.GetDtByKeyName(strKey, oDictionaryTable, oDictionaryRow);
		    DateTime _end = DateTime.Now;
		    oTemplatePageInfo.intDataTimeSpan += Convert.ToInt32(_end.Subtract(_start).TotalMilliseconds);
		    return oReturn;
		}
		
		/// <summary>
		/// 检测是否为空
		/// </summary>
		public bool empty(string strSource)
		{
		    return strSource.Trim().Length <= 0;
		}
		
		#endregion

        //根据传递的模板实体类型，组合html代码
        public TemplateDllPageInfo Analysis(TemplateDllPageInfo oParamInfo)
        {      
            
			
			//开始计时
			DateTime oTimeStart = DateTime.Now;
			oParamInfo.intTotalTimeSpan = 0;
			oParamInfo.intDataTimeSpan = 0;
			
			#region 初始化基本的数据
			
			//将与设定的变量添加到当前集合里
			CommonMethord.InitPageVar(oParamInfo, oDictionaryObj);
			
			//将传递的实体初始化到全局实体里
			oTemplatePageInfo = oParamInfo;
			if (oTemplatePageInfo.intCurrentContentID > 0 && oTemplatePageInfo.oContentInfoRow == null)
			{
			    DataTable oContentInfoDataTable = m_IDAL.GetContentWithImgResource(oTemplatePageInfo.intCurrentContentID.ToString());
			    if (oContentInfoDataTable != null && oContentInfoDataTable.Rows.Count > 0)
			    {
			        oTemplatePageInfo.oContentInfoRow = m_IDAL.GetContentWithImgResource(oTemplatePageInfo.intCurrentContentID.ToString()).Rows[0];
			    }
			    else
			    {
			        oTemplatePageInfo.oContentInfoRow = null;
			    }
			}
			if (oTemplatePageInfo.intCurrentNodeID > 0 && oTemplatePageInfo.oNodeInfoRow == null)
			{
			    oTemplatePageInfo.oNodeInfoRow = m_IDAL.GetNodeInfo(false, oTemplatePageInfo.intCurrentNodeID.ToString(), false, string.Empty) as DataRow;
			}
			
			//添加当前结点信息、内容信息到全局变量库里
			SaveRow(strNodeInfo, oTemplatePageInfo.oNodeInfoRow);//oDictionaryRow.Add(strNodeInfo, oTemplatePageInfo.oNodeInfoRow);
			SaveRow(strCurrenContent, oTemplatePageInfo.oContentInfoRow);//oDictionaryRow.Add(strCurrenContent, oTemplatePageInfo.oContentInfoRow);
			
			//添加当前结点id、信息id到全局变量库里
			SaveVar(strIndexID, oTemplatePageInfo.intCurrentContentID);//oDictionaryObj.Add(strIndexID, oTemplatePageInfo.intCurrentContentID);
			SaveVar(strNodeID, oTemplatePageInfo.intCurrentNodeID);//oDictionaryObj.Add(strNodeID, oTemplatePageInfo.intCurrentNodeID);
			
			
			//保存页面全局变量
			DataTable oTable = new DataTable();
			
			oTable.Columns.Add("TotalNum");
			oTable.Columns.Add("TotalPage");
			oTable.Columns.Add("CurrentPage");
			oTable.Columns.Add("PageNum");
			oTable.Columns.Add("URL");
			oTable.Columns.Add("PageList");
			
			DataRow oPageInfo = oTable.NewRow();
			
			oPageInfo["TotalNum"] = 0;
			oPageInfo["TotalPage"] = 0;
			oPageInfo["CurrentPage"] = 0;
			oPageInfo["PageNum"] = 0;
			oPageInfo["URL"] = 0;
			oPageInfo["PageList"] = 0;
			
			SaveRow("PageInfo", oPageInfo);
			
			
			//根据不同的页面类型做不同的预处理
			DateTime oPreOper_start = DateTime.Now;
			CommonMethord.PageOper_pre(oTemplatePageInfo, m_IDAL);
			DateTime oPreOper_end = DateTime.Now;
			oTemplatePageInfo.intPreExecuteDataTimeSpan = Convert.ToInt32(oPreOper_end.Subtract(oPreOper_start).TotalMilliseconds);
			
			#endregion
			
			#region 临时变量
			            
			ArrayList olistParams = new ArrayList();//函数的参数
			            
			bool isSuccess = false;//是否正确执行
			            
			Dictionary<string, string> oAttributes = new Dictionary<string, string>();//CMS标签的参数
			
			//DataTable oDataTabletemp = null;//临时DataTable
			//DataRow oDataRowtemp = null;//临时DataRow
			
			#endregion
			
			#region 处理模板标签 
			
             
			
			/*   解析模板页的第001行数据   */
			oTemplatePageInfo.strBuildHtml.AppendLine("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
			
			/*   解析模板页的第002行数据   */
			oTemplatePageInfo.strBuildHtml.AppendLine("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
			
			/*   解析模板页的第003行数据   */
			oTemplatePageInfo.strBuildHtml.AppendLine("<head>");
			
			/*   解析模板页的第004行数据   */
			oTemplatePageInfo.strBuildHtml.AppendLine("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");
			
			/*   解析模板页的第005行数据   */
			oTemplatePageInfo.strBuildHtml.AppendLine("<title>页眉 - 农牧渔查询</title>");
			
			/*   解析模板页的第006行数据   */
			oTemplatePageInfo.strBuildHtml.Append    ("<link href=\"");
			oTemplatePageInfo.strBuildHtml.Append    (ConvertSpecialChar(GetTagValue("", "", "SKIN_URL")));// 处理[$SKIN_URL] 
			oTemplatePageInfo.strBuildHtml.Append    ("style/base.css\" type=\"text/css\" rel=\"stylesheet\" />");
			oTemplatePageInfo.strBuildHtml.AppendLine();
			
			/*   解析模板页的第007行数据   */
			oTemplatePageInfo.strBuildHtml.Append    ("<link href=\"");
			oTemplatePageInfo.strBuildHtml.Append    (ConvertSpecialChar(GetTagValue("", "", "SKIN_URL")));// 处理[$SKIN_URL] 
			oTemplatePageInfo.strBuildHtml.Append    ("style/common.css\" type=\"text/css\" rel=\"stylesheet\" />");
			oTemplatePageInfo.strBuildHtml.AppendLine();
			
			/*   解析模板页的第008行数据   */
			oTemplatePageInfo.strBuildHtml.AppendLine("</head>");
			
			/*   解析模板页的第010行数据   */
			oTemplatePageInfo.strBuildHtml.AppendLine("<body>");
			
			/*   解析模板页的第011行数据   */
			oTemplatePageInfo.strBuildHtml.AppendLine("<div class=\"w1003 f12 tr top\"><a href=\"#\">设为首页</a>|<a href=\"#\">加为收藏</a></div>");
			
			/*   解析模板页的第013行数据   */
			oTemplatePageInfo.strBuildHtml.Append    ("<div class=\"w985 theme\"><img src=\"");
			oTemplatePageInfo.strBuildHtml.Append    (ConvertSpecialChar(GetTagValue("", "", "SKIN_URL")));// 处理[$SKIN_URL] 
			oTemplatePageInfo.strBuildHtml.Append    ("images/theme.jpg\" /></div>");
			oTemplatePageInfo.strBuildHtml.AppendLine();
			
			/*   解析模板页的第015行数据   */
			oTemplatePageInfo.strBuildHtml.AppendLine("<div class=\"w985 nav\"><ul class=\"f14 fb\">");
			
			/*   解析模板页的第016行数据   */
			oTemplatePageInfo.strBuildHtml.AppendLine("	<li class=\"fl tc navFirst\"><a href=\"index.html\" target=\"_parent\">首 页</a></li>");
			
			/*   解析模板页的第017行数据   */
			oTemplatePageInfo.strBuildHtml.Append    ("	");
			/**** 处理<CMS action="NODELIST" return="List" Type="brother" NodeID="3" Ignore="" />......begin    */
			oAttributes.Clear();
			oAttributes.Add("action", "NODELIST");
			oAttributes.Add("return", "List");
			oAttributes.Add("type", "brother");
			oAttributes.Add("nodeid", "3");
			SaveCMSTagData(oAttributes);
			/**** 处理<CMS action="NODELIST" return="List" Type="brother" NodeID="3" Ignore="" />......end    */
			oTemplatePageInfo.strBuildHtml.Append    ("	");
			oTemplatePageInfo.strBuildHtml.AppendLine();
				
				/*   解析模板页的第018行数据   */
			oTemplatePageInfo.strBuildHtml.Append    ("	");
			int  int19555ab65bab417089511f0da51b5fec = 0 + 1 -1;
			foreach (DataRow oTempRows19555ab65bab417089511f0da51b5fec in getDT("List").Rows)
			{
				//记录并保存当前位置
				int19555ab65bab417089511f0da51b5fec++;
				SaveVar("key", int19555ab65bab417089511f0da51b5fec);
				
				//保存行变量
				SaveRow("var", oTempRows19555ab65bab417089511f0da51b5fec);
				oTemplatePageInfo.strBuildHtml.Append    ("	");
				oTemplatePageInfo.strBuildHtml.AppendLine();
				
				/*   解析模板页的第019行数据   */
				oTemplatePageInfo.strBuildHtml.Append    ("    	<li class=\"fl tc\"><a href=\"");
				oTemplatePageInfo.strBuildHtml.Append    (ConvertSpecialChar(GetTagValue("var", "", "NodeURL")));// 处理[$var.NodeURL] 
				oTemplatePageInfo.strBuildHtml.Append    ("\" target=\"_parent\">");
				oTemplatePageInfo.strBuildHtml.Append    (ConvertSpecialChar(GetTagValue("var", "", "NodeName")));// 处理[$var.NodeName] 
				oTemplatePageInfo.strBuildHtml.Append    ("</a></li>");
				oTemplatePageInfo.strBuildHtml.AppendLine();
			
			/*   解析模板页的第020行数据   */
				oTemplatePageInfo.strBuildHtml.Append    ("	");
			}
			oTemplatePageInfo.strBuildHtml.Append    ("	");
			oTemplatePageInfo.strBuildHtml.AppendLine();
			
			/*   解析模板页的第021行数据   */
			oTemplatePageInfo.strBuildHtml.AppendLine("</ul></div>");
			
			/*   解析模板页的第022行数据   */
			oTemplatePageInfo.strBuildHtml.AppendLine("</body>");
			
			/*   解析模板页的第023行数据   */
			oTemplatePageInfo.strBuildHtml.AppendLine("</html>");

            
            #endregion

            //根据不同的页面类型做不同的预处理
            DateTime oEndOper_start = DateTime.Now;
            CommonMethord.PageOper_end(oTemplatePageInfo, m_IDAL);
            DateTime oEndOper_end = DateTime.Now;
            oTemplatePageInfo.intEndExecuteDataTimeSpan = Convert.ToInt32(oEndOper_end.Subtract(oEndOper_start).TotalMilliseconds);

            //计时结束
            DateTime oTimeEnd = DateTime.Now;
            oParamInfo.intTotalTimeSpan = Convert.ToInt32(oTimeEnd.Subtract(oTimeStart).TotalMilliseconds);

            return oTemplatePageInfo;

        }       
    }       
}       

